从 福利哥 导入 〇蓝图, 渲染模板, 万事通, 请求, 重定向, 闪现, 构造url
从 福利哥_数据官 导入 或_
从 问答.装饰器 导入 需要登录
从 .表单 导入 〇问答表单, 〇评论表单
从 问答.模型 导入 〇问题模型, 〇用户模型, 〇评论模型
从 问答 导入 数据库

# 导入 福利哥_数据官

蓝图 = 〇蓝图("问答", __名称__, url前缀='/')

@蓝图.路由('/')
套路 索引():
    """ 如果 有属性(万事通, '用户'):
        打印(万事通.用户.用户名)
    上下文 = {
        '用户': 万事通.用户
    }
    返回 渲染模板('index.html', **上下文) """
    问题々 = 〇问题模型.查询.排序_依据(数据库.文本('-发布时间')).全部()
    返回 渲染模板('index.html', 问题々=问题々)

@蓝图.路由('/发布', 方法々=['GET', 'POST'])
@需要登录
套路 发布():
    # 如果 请求.方法 == 'GET':
    #     返回 渲染模板('发布问答.html')
    表单 = 〇问答表单()
    如果 表单.是提交():
        如果 表单.验证通过():
            # 打印(表单)
            标题 = 表单.标题.数据
            内容 = 表单.内容.数据
            问题 = 〇问题模型(标题=标题, 内容=内容, 发布者=万事通.用户)  # 发布者=万事通.用户.用户名 ？
            数据库.会话.添加(问题)
            数据库.会话.提交()
            返回 重定向('/')
        否则:
            闪现('标题或内容格式错误')
    返回 渲染模板('发布问答.html', 表单=表单)


@蓝图.路由('/问题/<整数:id>')
套路 问题详情(id):
    表单 = 〇评论表单()
    # 打印(表单)
    问题 = 〇问题模型.查询.获取(id)
    # 评论々 = 〇评论模型.查询.筛选_依据(问题id=问题.id)
    # 打印(问题)
    返回 渲染模板('详情.html', 问题=问题, 评论々=问题.评论々, 表单=表单)

@蓝图.路由('/评论/<整数:问题id>', 方法々=['POST'])
@需要登录
套路 评论(问题id):
    表单 = 〇评论表单()
    如果 表单.是提交():
        # 打印(表单)
        如果 表单.验证通过():
            内容 = 表单.内容.数据
            记录 = 〇评论模型(内容=内容, 评论者=万事通.用户, 问题id=问题id)
            数据库.会话.添加(记录)
            数据库.会话.提交()
            返回 重定向(构造url('问答.问题详情', id=问题id))
        否则:
            打印('出错了...', 表单.错误々) # 出错了... {'csrf_token': ['The CSRF token is missing.']}
    返回 重定向(构造url('用户.登录', 表单=表单))

@蓝图.路由('/搜索')
套路 搜索():
    关键词 = 请求.args.get('搜索')
    结果々 = 〇问题模型.查询.筛选(或_(〇问题模型.标题.包含(关键词), 〇问题模型.内容.包含(关键词)))
    返回 渲染模板('index.html', 问题々=结果々)